package br.com.minilocadora.managedbean;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SelectableDataModel;
import org.primefaces.model.SortOrder;

import br.com.minilocadora.modelo.Funcionario;
import br.com.minilocadora.service.FuncionarioService;


public class LazyFuncionario extends LazyDataModel<Funcionario> implements SelectableDataModel<Funcionario>, Serializable
{

	/**
	 * 
	 */
	private static final long serialVersionUID = -4991685715110547270L;
	
	private List<Funcionario> funcionarios;
	
	private FuncionarioService funcionarioService;
	
	public LazyFuncionario(FuncionarioService funcionarioService)
	{
		this.funcionarioService = funcionarioService;
	}
	
	
	@Override
	public List<Funcionario> load(int first, int pageSize,
			String sortField, SortOrder sortOrder,
			Map<String, String> filters) {
		
		String ordenacao = null;
		
		if(sortField != null)
		{
			if(sortOrder == SortOrder.ASCENDING)
			{
				ordenacao = "ASCENDING";
			}
			else
			{
				ordenacao = "DESCENDING";
			}
		}
		
		
		try {
			funcionarios = funcionarioService.listar(first, pageSize, sortField, ordenacao, filters);
		} catch (Exception e) {
		
			e.printStackTrace();
			
		}
		
		
		if(getRowCount() <= 0)
		{
			try {
				setRowCount(funcionarioService.totalDeRegistro());
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		setPageSize(pageSize);
		
		super.setWrappedData(funcionarios);
		
		return funcionarios;
	}
	
	
	@Override
    public Object getRowKey(Funcionario item) {
        return item.getCodigo();
	}
	
	
	
	@SuppressWarnings("unchecked")
	@Override
	public Funcionario getRowData(String rowKey) {

		
		Integer id = Integer.valueOf(rowKey);
		
		for (Funcionario funcionario : (List<Funcionario>) getWrappedData()) {
				
			if(id.equals(funcionario.getCodigo()))
			{
				return funcionario;
			}
			
		}
		
		return null;
	}
	
	
	@Override
    public void setRowIndex(int rowIndex) {
        /*
         * The following is in ancestor (LazyDataModel):
         * this.rowIndex = rowIndex == -1 ? rowIndex : (rowIndex % pageSize);
         */
        if (rowIndex == -1 || getPageSize() == 0) {
            super.setRowIndex(-1);
        }
        else
            super.setRowIndex(rowIndex % getPageSize());
    }
	
}
